/**
 * Notes: 本业务基本控制器
 * Date: 2021-03-15 19:20:00 
 * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux0730 (wechat)
 */

const BaseController = require('../../../framework/platform/controller/base_controller.js');
const BaseProjectService = require('../service/base_project_service.js');
const appCode = require('../../../framework/core/app_code.js');
const timeUtil = require('../../../framework/helpers/time_util.js');

// 用于跟踪初始化是否已完成
let isInitialized = false;

class BaseProjectController extends BaseController {
	constructor(route, openId, event) {
		super(route, openId, event);
		this._timestamp = timeUtil.time();
	}

	// 初始化数据库
	async initSetup() {
		// 如果已经初始化过，直接返回
		if (isInitialized) {
			console.log('数据库已经初始化过，跳过重复初始化');
			return;
		}

		try {
			let service = new BaseProjectService();
			await service.initSetup();
			console.log('数据库初始化完成');
			isInitialized = true;
		} catch (err) {
			console.error('数据库初始化失败:', err);
			throw err;
		}
	}

	/** 是否管理员 */
	async isAdmin() {
		// 获取当前用户的角色
		let admin = await this.getAdminUser();
		return admin ? true : false;
	}

	/** 获取当前用户可以管理的部门ID */
	async getDepartmentIds() {
		let admin = await this.getAdminUser();
		if (!admin) return [];

		return admin.departmentIds || [];
	}

	/** 数据校验 */
	validateData(rules) {
		let input = super.validateData(rules);
		return input;
	}

	/**
	 * 获取当前模块
	 */
	getProjectId() {
		return appCode.PROJECT_ID;
	}  
	
	/**
	 * 设置Model实例对象的表名
	 * @param {string} tableName - 表名
	 */
	setModel(tableName) {
		if (!tableName) return;
		
		// 设置表名，可以由子类实现具体逻辑
		console.log(`[BaseProjectController] 设置Model表名: ${tableName}`);
		this._tableName = tableName;
	}
	
	/**
	 * 获取当前用户信息
	 * @returns {object} 用户信息对象
	 */
	async getUserInfo() {
		// 默认返回一个基本的用户信息对象，包含用户ID和用户名
		return {
			USER_ID: this._userId || '',
			USER_NAME: '系统用户', // 可以根据实际需求修改默认用户名
			ROLES: [] // 用户角色列表，默认为空
		};
	}
}

module.exports = BaseProjectController;